Package de.yaams.maker.programm.project

Source Code of de.yaams.maker.programm.project.ProjectList

/**
*
*/
package de.yaams.maker.programm.project;

import java.io.File;

import javax.swing.JFileChooser;

import org.apache.commons.lang.SystemUtils;
import org.apache.log4j.Level;

import de.yaams.maker.helper.FileHelper;
import de.yaams.maker.helper.gui.AE;
import de.yaams.maker.helper.gui.YDialog;
import de.yaams.maker.helper.gui.YFactory;
import de.yaams.maker.helper.gui.YMessagesDialog;
import de.yaams.maker.helper.gui.form.FormButton;
import de.yaams.maker.helper.gui.form.FormCheckbox;
import de.yaams.maker.helper.gui.form.FormComboBox;
import de.yaams.maker.helper.gui.form.FormFileSelectField;
import de.yaams.maker.helper.gui.form.FormHelper;
import de.yaams.maker.helper.gui.form.FormInfo;
import de.yaams.maker.helper.gui.form.FormTextField;
import de.yaams.maker.helper.gui.form.core.FormBuilder;
import de.yaams.maker.helper.gui.form.core.FormHeader;
import de.yaams.maker.helper.gui.form.validator.ValidatorBase;
import de.yaams.maker.helper.gui.form.validator.ValidatorUmlaut;
import de.yaams.maker.helper.gui.icons.FormIcon;
import de.yaams.maker.helper.gui.icons.IconCache;
import de.yaams.maker.helper.gui.list.BasisListElement;
import de.yaams.maker.helper.gui.list.YBasisListElementArrayList;
import de.yaams.maker.helper.language.I18N;
import de.yaams.maker.helper.language.T;
import de.yaams.maker.programm.YAamsCore;
import de.yaams.maker.programm.YaFrame;
import de.yaams.maker.programm.environment.YLevel;
import de.yaams.maker.programm.project.tab.ProjectTab;
import de.yaams.maker.programm.tabs.BasicTabEvent;
import de.yaams.maker.programm.tabs.HomeTab;
import de.yaams.maker.programm.tabs.TabEvent;
import de.yaams.maker.programm.tabs.YaTab;

/**
* @author Nebli
*
*/
public class ProjectList extends YBasisListElementArrayList {
  private static final long serialVersionUID = 2362479776677049608L;

  protected ProjectPanel ppanel;

  /**
   * @param ary
   */
  public ProjectList(ProjectPanel panel) {
    super(ProjectManagement.projects);
    ppanel = panel;
    add = true;
    open = true;
    delete = true;
    config = true;
    buildToolbar(T.r("project"), "project", 32);

    // add button
    toolbar.add(YFactory.tb(T.r("project.tab"), "tab_arrow", new AE() {

      @Override
      public void run() {
        doubleClick();

      }
    }, 32));

    updateLeftView();
  }

  /**
   * Get the infotext for add a label
   *
   * @return
   */
  @Override
  protected String getOverlayLabelText() {
    return T.r("project.empty", title);
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * de.yaams.packandgo.helper.gui.list.YSimpleList#getIcon(java.lang.Object)
   */
  @Override
  public String getIcon(final BasisListElement o) {
    if (o instanceof Project) {
      Project p = (Project) o;
      return o.getIcon() + "_" + (p.isLock() ? p.isLockOpen() ? "unlock" : "lock" : ((Project) o).getType().getIcon());
    } else {
      return o.getIcon();
    }
  }

  /**
   * Helpermethod
   *
   * @param p
   * @return
   */
  protected FormBuilder getMainForm(final Project p) {
    // has types?
    if (ProjectManagement.types.size() == 0) {
      YDialog.ok(I18N.t("Kein Projekttyp gefunden."), I18N
          .t("{0} verwaltet die Projekte mit Projekttypen. Es ist aber leider noch keine installiert. Installiere einfach die passenden Plugins."),
          "project_warn");
      return null;
    }

    // create Form
    final FormBuilder f = new FormBuilder("project");
    f.addElement("basic.folder", new FormFileSelectField(I18N.t("Ordner"), p == null ? null : p.getPath(), JFileChooser.OPEN_DIALOG, true, true))
        .addValidator(new ValidatorUmlaut());
    f.addElement("basic.name", new FormTextField(I18N.t("Name"), p == null ? "Project" : p.getTitle()));
    f.addElement("basic.icon", new FormIcon(I18N.t("Icon"), p == null ? IconCache.games[0] : p.getIcon(), IconCache.games));

    // build list for types
    String[] key = ProjectManagement.types.keySet().toArray(new String[ProjectManagement.types.size()]);
    String[] title = new String[key.length];
    for (int i = 0, l = key.length; i < l; i++) {
      title[i] = ProjectManagement.getType(key[i]).getTitle();
    }

    f.addElement("basic.type", new FormComboBox(I18N.t("Typ"), key, title).selectField(p == null ? null : p.getType().getType()));

    // add crypto
    if (YLevel.IS_ADVANCED) {
      f.addHeader("sec", new FormHeader(I18N.t("Sicherheit"), "lock").setCollapsed(true));

      // load infos
      final boolean cryp = p != null && p.getCache() != null && p.getCache().containsKey("projecttype");

      // add info
      if (p == null) {
        f.addElement("sec.info", new FormInfo("", I18N.t("Das Projekt kann erst verschlüsselt werden, wenn es erstellt wurde.")).setIcon("warn", 16));
      }

      // set it
      f.addElement(
          "sec.sec",
          new FormCheckbox(I18N.t("Projekt verschlüsseln"), cryp)
              .setInfoTxt(
                  "<html><strong>Vorgehen</strong><br>"
                      + "Wenn die Verschlüssungsfunktion aktiviert wurde, muss im nächsten Dialog der Name und das Password gewählt werden.<br>"
                      + "Wenn die Funktion deaktiviert wird, muss der Name und das Password eingegeben werden, wenn Sie noch nicht eingegeben wurden.<br>"
                      + "<br><strong>Hinweise</strong<br>"
                      + "Wenn das Projekt einmal entschlüsselt wurde, wird es erst wieder beim Beenden von YAams verschlüsselt. <br>"
                      + "Solange sind die Daten für jeden frei einsehbar. Die Verschlüsselung ist nur so gut, wie das Password & der Nutername sind.",
                  "help").setEnabled(p != null).addValidator(new ValidatorBase() {

                @Override
                public void isValide(YMessagesDialog y) {
                  boolean ncryp = Boolean.valueOf(form.getContentAsString());

                  // difference?
                  if (!y.hasErrors() && ncryp != cryp) {
                    // crypto it
                    if (ncryp) {

                      // ask for data
                      FormBuilder formb = new FormBuilder("project.sec");
                      formb.addElement("basic.name", new FormTextField(I18N.t("Name"), SystemUtils.USER_NAME));
                      formb.addElement("basic.pw", new FormTextField(I18N.t("Password"), p.getTitle()));

                      YDialog.showForm(I18N.t("Name & Password"), p.getIcon() + "_lock", formb);

                      // setit
                      p.getCache().put("projecttype", f.getElement("sec.typ").getContentAsString());
                      p.getCache().put(
                          "projectpw",
                          formb.getElement("basic.name").getContentAsString() + " - "
                              + formb.getElement("basic.pw").getContentAsString());
                    } else {

                      // decrypt it
                      p.load();
                      p.getCache().remove("projecttype");
                      p.getCache().remove("projectpw");
                    }
                  }

                }
              }));
      f.addElement(
          "sec.typ",
          FormHelper.setEnabeldWhenRightElementSelect(f.getElement("sec.sec"), new FormComboBox(I18N.t("Typ"), new String[] { "Blowfish", "DES",
              "RC2", "RC4", "RC5" }).selectField((String) (cryp ? p.getCache().get("projecttype") : "Blowfish")), "true"));
      f.getElement("sec.sec").informListeners();

    }

    return f;
  }

  /**
   * Open it
   */
  @Override
  public void doubleClick() {
    // check
    if (!canEdit()) {
      return;
    }

    // get it
    final Project p = (Project) getSelectedObject();
    p.load();
    YaFrame.open(TabEvent.buildParameter(ProjectTabEvent.HOME, p, null));

  }

  /*
   * (non-Javadoc)
   *
   * @see de.yaams.packandgo.helper.gui.list.YSimpleList#open()
   */
  @Override
  protected void open() {
    // get form
    final FormBuilder f = getMainForm(null);

    // has it?
    if (f == null) {
      return;
    }

    // show
    if (YDialog.showForm(I18N.t("Projekt importieren"), "project_open", f) == false) {
      return;
    }

    // basics
    String type = f.getElement("basic.type").getContentAsString();
    File path = new File(f.getElement("basic.folder").getContentAsString());

    // add project
    add(new Project(path, f.getElement("basic.name").getContentAsString(), f.getElement("basic.icon").getContentAsString(), type));
  }

  /*
   * (non-Javadoc)
   *
   * @see de.yaams.packandgo.helper.gui.list.YSimpleList#add()
   */
  @Override
  public void add() {

    // get form
    final FormBuilder f = getMainForm(null);

    // has it?
    if (f == null) {
      return;
    }

    f.getElement("basic.folder").addValidator(new ValidatorBase() {

      @Override
      public void isValide(YMessagesDialog y) {
        // folder exist and contains files?
        File[] file = new File(f.getElement("basic.folder").getContentAsString()).listFiles();
        if (file != null && file.length > 0) {
          y.add(I18N.t("{0} enthält schon Dateien. Evtl. werden vorhandene überschrieben oder gelöscht.", f.getElement("basic.folder")
              .getContentAsString()), Level.WARN_INT);
        }

      }
    });

    // show
    if (YDialog.showForm(I18N.t("Projekt hinzufügen"), "project_add", f) == false) {
      return;
    }

    // basics
    String type = f.getElement("basic.type").getContentAsString();
    File path = new File(f.getElement("basic.folder").getContentAsString());

    Project p = new Project(path, f.getElement("basic.name").getContentAsString(), f.getElement("basic.icon").getContentAsString(), type);

    // create base project
    if (ProjectManagement.getType(type).createProject(p)) {
      // add project
      add(p);

    } else {
      YDialog.ok(I18N.t("Kann {0} nicht erstellen.", p.getTitle()), "", p.getIcon() + "_error");
    }

  }

  /*
   * (non-Javadoc)
   *
   * @see de.yaams.packandgo.helper.gui.list.YSimpleList#add()
   */
  @Override
  protected void configIntern() {
    Project p = (Project) getSelectedObject();

    // get form
    FormBuilder f = getMainForm(p);
    f.getElement("basic.type").setEnabled(false);

    // show
    if (YDialog.showForm(I18N.t("Projekt editieren"), "project_opts", f) == false) {
      return;
    }

    // edit project
    p.setPath(new File(f.getElement("basic.folder").getContentAsString()));
    p.setTitle(f.getElement("basic.name").getContentAsString());
    p.setIcon(f.getElement("basic.icon").getContentAsString());
    p.updateDesc();
  }

  /**
   * Helpermethod to update the view
   */
  protected void updateLeftView() {

    // get it
    final Project p = (Project) getSelectedObject();

    // form
    FormBuilder f = new FormBuilder("project.left");

    // add basics
    f.addHeader("main", new FormHeader(YAamsCore.NAME, "yaams").setSorting(-2));
    f.addElement("main.opts", new FormButton(I18N.t("Options"), "opts", new AE() {

      @Override
      public void run() {
        YaFrame.open(HomeTab.OPTIONS);

      }
    }));
    f.addElement("main.plugins", new FormButton(I18N.t("Plugins"), "plugin", new AE() {

      @Override
      public void run() {
        BasicTabEvent.openPlugin();

      }
    }).setSorting(1));
    f.addElement("main.feedback", new FormButton(I18N.t("Feedback"), "mail_web", new AE() {

      @Override
      public void run() {
        BasicTabEvent.openFeedback();

      }
    }).setSorting(2));

    // has project?
    if (p != null) {

      // main elements
      f.getHeader("basic").setTitle(p.getTitle()).setIcon(p.getIcon()).setCollapsed(true).setSorting(-1);
      f.addElement("basic.type", new FormInfo(I18N.t("Typ"), p.getType().getTitle()));

      // aktions
      f.addHeader("action", new FormHeader(I18N.t("Aktionen"), "mouse"));
      f.addElement("action.tab", new FormButton(I18N.t("Im Tab öffnen"), "tab_arrow", new AE() {

        @Override
        public void run() {
          doubleClick();

        }
      }).setSorting(-2));
      f.addElement("action.edit", new FormButton(I18N.t("Konfigurieren"), "opts", new AE() {

        @Override
        public void run() {
          config();

        }
      }).setSorting(-1));
      f.addElement("action.del", new FormButton(I18N.t("Löschen"), "trash", new AE() {

        @Override
        public void run() {
          del();

        }
      }));

      // add addons
      p.getType().leftForm(f, p);

      // show
      ppanel.setLeft(f.getPanel(true));
    } else {
      f.getHeader("basic").setTitle("Erste Schritte").setIcon("help");
      // aktions
      f.addElement("basic.add", new FormButton(I18N.t("Erstellen"), "project_add", new AE() {

        @Override
        public void run() {
          add();

        }
      }));
      f.addElement("basic.open", new FormButton(I18N.t("Importieren"), "folder", new AE() {

        @Override
        public void run() {
          open();

        }
      }));

      // show
      ppanel.setLeft(f.getPanel(true));
    }

  }

  /**
   * Edit the object, add the name value
   */
  @Override
  protected void selected() {
    updateLeftView();
  }

  /*
   * (non-Javadoc)
   *
   * @see de.yaams.packandgo.helper.gui.list.YSimpleList#info()
   */
  @Override
  protected void info() {
  }

  /*
   * (non-Javadoc)
   *
   * @see de.yaams.packandgo.helper.gui.list.YSimpleList#delObject(int)
   */
  @Override
  public void delObject(final int id) {

    // close tabs
    if (getSelectedObject() instanceof Project) {
      for (YaTab tab : YaFrame.get().getAllOpenTabs()) {
        if (tab instanceof ProjectTab) {
          ProjectTab p = (ProjectTab) tab;
          if (p.getProject().equals(getSelectedObject())) {
            YaFrame.close(p.getId());
          }
        }
      }

      // remove cache
      ProjectManagement.getProjects().remove(getSelectedObject());

      // delete files?
      if (YDialog.askUser(I18N.t("Dateien mitlöschen?"), "project.file.del", "trash_folder",
          I18N.t("Sollen alle Dateien & Ordner in {0} mitgelöscht werden?", ((Project) getSelectedObject()).getPath()), I18N.t("Dateien löschen"),
          I18N.t("Dateien behalten"), "trash", "folder_ok")) {
        FileHelper.deleteTree(((Project) getSelectedObject()).getPath());
      }
    }
    super.delObject(id);

  }
}
TOP

Related Classes of de.yaams.maker.programm.project.ProjectList

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.